package lambda;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * JDK8之后Java推出了一个新特性:lambda表达式
 *
 * lambda表达式可以用更简介的语法创建匿名内部类
 * 但是前提是实现的接口只能有一个抽象方法。
 *
 * lambda表达式可以忽略曾经匿名内部类臃肿的语法定义，而更简明扼要的体现
 * 重写方法的重点逻辑，让代码更优雅
 *
 * 语法:
 * (参数列表)->{
 *     方法体
 * }
 */
public class LambdaDemo1 {
    public static void main(String[] args) {
        //场景:使用匿名内部类创建比较器为字符串排序使用
        Comparator<String> com = new Comparator<String>() {
            public int compare(String o1, String o2) {
                return o2.length()-o1.length();
            }
        };
        //标准的lambda表达式(忽略了匿名内部类中接口与方法的定义)
        Comparator<String> c1 =(String o1, String o2)->{
                                    return o2.length()-o1.length();
                                };

        //参数的类型可以忽略不写
        Comparator<String> c2 =(o1,o2)->{
            return o2.length()-o1.length();
        };
        /*
            如果方法只有一句代码，那么方法的{}可以忽略不写
            同时如果这句代码含有return,那么也要一同忽略
         */
        Comparator<String> c3 =(o1,o2)->o2.length()-o1.length();

        List<String> list = new ArrayList<>();
        list.add("王克晶");
        list.add("传奇");
        list.add("伟超老师");
        Collections.sort(list,(o1,o2)->o2.length()-o1.length());
    }
}
